[アップデート]Amazon Personalizeの新レシピNext Best Actionでユーザーに対する最適なNEXTアクションを炙り出す #AWSreInvent
データアナリティクス事業本部 インテグレーション部 機械学習チームの貞松です。
Amazon Personalizeのサービスアップデートにより、新たなレシピ(Personalizeにビルトインされている推薦アルゴリズム)が追加になりました。
その名も「Next Best Action」です。名前の通り、次にユーザーに対して実施すべき最適なアクションを教えてくれるようです。
本記事では、Next Best Actionレシピを利用することに得られる価値やレシピの仕様、利用手順、その他注意事項等について順番に解説していきます。
Next Best Actionレシピの概要
基本的な概念、思想については下記AWS公式ブログを参照いただくと良いと思います。実際に実行する為の情報は一切ないのであくまで概要を掴む為の記事だとご認識ください。
対象となるサービス(ECやコンテンツ配信など)について、購入や視聴といった直接的なコンバージョン以外の行動を含めたユーザーのアクションに注目し、次にユーザーに推薦することでロイヤリティを高めるアクションのリストを作り出すことができる、という主旨の機能になっています。
内容からして、昨今一般的になった複数のTierに分かれたサブスクリプションプランや専用のモバイルアプリを持つサービスを想定しているようです。
Next Best Actionレシピの仕様
必要なデータセット
Next Best Actionレシピを使用する為に必須のデータセットはActionsとItem interactionsの2つです。
任意のデータセットとしてAction interactionsが使用できます。が、これが無いとユーザー個別の(パーソナライズされた)NEXTアクションのリストを生成できない為、実質必須のデータセットです。
各データセットの概要は以下の通りです。
Actions
ユーザーに対して実施可能なアクションのリスト(マスタ)です。一意なActionIdによって各アクションが管理されています。
Next Best Actionレシピで推薦を実行した際には、このリストの中から、各ユーザーに対するアクションをピックアップしてくれます。
Item interactions
アイテムベースのユーザー行動データです。ECであれば商品の閲覧や購入、お気に入り登録など、コンテンツ配信であれば番組の閲覧やマイリスト登録などがこれにあたります。
Amazon Personalizeの必須データセットであり、このデータを用いて、ユーザーに対する推薦アイテムのリストを作成することができます(Amazone Personalizeと言えばこの機能を思い浮かべる人も多いかと思います)
Action interactions
アクションベースのユーザー行動データです。
Item interactionsはItemIdとUserIdがペアになったデータですが、Action interactionsはUserIdとActionId(Actionsで定義されているID)がペアになったデータです。
各データセットのスキーマ
各データセットにインポートするデータを準備する必要もある為、ここで書くデータセットで必須のスキーマ、任意のスキーマについて解説しておきます。
※「任意の予約スキーマ」以外の任意のスキーマ(利用者によるカスタムのスキーマ)については、予約スキーマ名以外の任意の名称で、string型かつcategoricalであれば10個まで設定可能です。
Actions
- 必須
- ACTION_ID (string)
- 任意の予約スキーマ
- CREATION_TIMESTAMP (long)
- VALUE (long, null)
- TYPE (string, null)
- EXPIRATION_TIMESTAMP (long, null)
- REPEAT_FREQUENCY (long, null)
Item interactions
- 必須
- USER_ID (string)
- ITEM_ID (string)
- TIMESTAMP (long)
- 任意の予約スキーマ
- EVENT_TYPE (string)
- EVENT_VALUE (float, null)
- IMPRESSION (string, null)
- RECOMMENDATION_ID (string, null)
- EVENT_ATTRIBUTION_SOURCE (string, null)
Action interactions
- 必須
- USER_ID (string)
- ACTION_ID (string)
- EVENT_TYPE (string)
- TIMESTAMP (long)
- 任意の予約スキーマ
- IMPRESSION (string, null)
- RECOMMENDATION_ID (string, null)
詳細については、下記のAWS公式ドキュメントをご参照ください。
注意事項
Action interactionsデータセットのEVENT_TYPEは、従来のItem interactionsデータセットのEVENT_TYPEのようにユーザー任意のイベントラベル(PurchaseやWatchなど)ではなく、各ActionIdに紐づくアクションに対するユーザーの反応を3種類の決められたラベルを使って管理する点に注意が必要です。
Action interactionsデータセットのEVENT_TYPEで使用可能なラベル(string型の値)は以下の3種類です。
- Taken
- ユーザーが明示的にアクションに対して反応した場合(商品を購入した、サブスクリプション登録した、など)に使用します。
- Not Taken
- ユーザーが明示的にアクションに対して拒否を示した場合(メールの開封がされなかった、確認画面でNoを選択した、など)に使用します。
- Viewed
- ユーザーの目に触れたものの、明示的に承諾も拒否も無かった場合(上記のTaken、Not Takenどちらにも当てはまらない)に使用します。
詳細については、下記のAWS公式ドキュメントをご参照ください。
Next Best Actionレシピの実行手順
使用するデータ
以下のようなAction、Item interactions、Action interactionsに該当するデータを準備し、任意のS3バケットに配置しておきます。
Actionデータセット
Item interactionsデータセット
Action interactionsデータセット
データセットグループの作成
まずはPersonalizeの土台となるデータセットグループを作成します。
Next Best Actionを使用する為には、データセットグループのDomainは「Custom」で作成しておきます。
データセットの作成
作成されたデータセットグループのOverview画面から「Create dataset」を選択すると、作成するデータセットを選択することができます。
ここではItem interactions datasetを作成します。
Import method(データインポート方式)は、「Import data directly into Amazon Personalize datasets」を選択します。
これはPersonalizeのデータセットインポートジョブで、事前にS3に配置したCSVファイルを直接Personalizeのデータセットにインポートする方式です。
次にデータセットのスキーマ定義を設定します。
これは、前述の各データセットのスキーマに関する仕様に沿って設定します。
ここまででデータセットの枠が出来上がったので、中身のデータをインポートする為のジョブを実行します。
事前にS3に配置したCSVファイルのURIやジョブの実行ロールを設定して実行します。
Item interactionsと同様に、他2つのデータセットについても作成、データインポートを実行します。
ソリューションの作成
いよいよNext Best Actionレシピを使って、ソリューション(推薦モデル)を作成します。
Custom resourcesのSolutions and recipes画面で「Create solution」を選択します。
Solution typeで、「Action recommendation」を選択すると、レシピとして「aws-next-best-action」が自動的に設定されます。 Action recommendationでは、レシピが1種類固定の為、変更はできません。
「aws-next-best-action」のハイパーパラメータである、「Action optimization period」は、ユーザーが実行しそうなアクションについて何日後のアクションを予測するかを設定します。
Action interactionsデータセットの件数が少ない場合は、大きめの値に設定することが推奨されています。
画面上に記載はありませんが、値の取りうる範囲は7〜28なので注意が必要です。
Next Best Actionレシピの詳細については、下記のAWS公式ドキュメントをご参照ください。
推薦の実行
ソリューションの作成が完了したら、実際にアクションの推薦を実行します。
Next Best Actionレシピを使用したソリューションはBatch Recommendationに対応していない為、必然的にCampaign(リアルタイムエンドポイント)を作成する必要があります。
Camgaign作成画面で、作成済みのソリューションとソリューションバージョンを選択します。
Campaignの作成が完了したら、テスト実行してみます。
データ内に存在するUserIdを指定して、「Get recommendations」をクリックすると、該当ユーザーに対する推薦アクションが5つ表示されます。
Action interactionsデータセットが存在するにも関わらずScoreが軒並み0.0になってしまっていますが、多少データを修正したり、パラメータを変更しても推薦されるActionIdに変化はあるものの、Scoreは0.0のままでした。
要因としては以下が考えられます。
- データ件数が単純に少なすぎる
- デモデータのaction_idやevent_typeの傾向(偏り)が適切でない
- デモデータのtimestampの整合性に問題がある(日付の順序や間隔など)
この辺りについては、引き続きの検証事項としたいと思います。
最後に
今回はAmazon Personalizeの新レシピ「Next Best Action」について解説しました。
利用されるサービス側のアプリケーションやMAツールとの連携や必要なデータセットの準備等に結構なコストが掛かりますが、それらの準備が整いさえすれば、非常に強力なマーケティング施策支援になり得ると感じました。
今回使用したデモデータの形式に囚われず、柔軟な発想でユースケースに思いを巡らせていただけると幸いです。